frp 内网穿透教程:轻松实现远程访问内网服务

234次阅读
没有评论
内容纲要

## 什么是 frp?

[frp (Fast Reverse Proxy)](https://github.com/fatedier/frp) 是一款高性能的反向代理应用,用于内网穿透。它可以将内网中的服务(例如 Web 服务、SSH、远程桌面等)暴露到公网,方便远程访问。

常见应用场景:

- 在家远程访问公司或家庭内网服务器

- 将本地开发环境映射到公网,方便测试和演示

- 为树莓派、NAS 等设备提供外网访问入口

---

## 安装 frp

frp 是 Go 写的单个二进制程序,部署非常简单:

```bash
# 下载 frp(以 0.60.0 为例,可去 GitHub Releases 获取最新版本)
wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz
tar -zxvf frp_0.60.0_linux_amd64.tar.gz
cd frp_0.60.0_linux_amd64
```

解压后会看到:

- `frps`:服务端程序

- `frps.toml`:服务端配置文件

- `frpc`:客户端程序

- `frpc.toml`:客户端配置文件

---

## 服务端配置(frps)

服务端需要有 **公网 IP 的 VPS**,比如阿里云、腾讯云、搬瓦工等。

编辑配置文件 `frps.toml`:

```toml
# frps.toml
bindPort = 7000 # frpc 客户端连接 frps 的端口
dashboardPort = 7500 # Web 管理面板端口
dashboardUser = "admin" # 面板用户名
dashboardPwd = "admin123" # 面板密码
auth.method = "token" # 使用 token 验证
auth.token = "1234567890" # 客户端和服务端必须一致
```

启动服务端:

```bash
./frps -c frps.toml
```

后台运行(推荐使用 systemd 管理):

```bash
# /etc/systemd/system/frps.service
[Unit]
Description=frp server
After=network.target

[Service]
ExecStart=/root/frp/frps -c /root/frp/frps.toml
Restart=always
User=root

[Install]
WantedBy=multi-user.target
```

```bash
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
```

---

## 客户端配置(frpc)

客户端运行在 **内网机器**(例如你的家用电脑、树莓派、NAS)。

编辑 `frpc.toml`:

```toml
# frpc.toml
serverAddr = "你的VPS公网IP"
serverPort = 7000
auth.method = "token"
auth.token = "1234567890"

[proxies](proxies)
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

[proxies](proxies)
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["example.com"]
```

说明:

- `ssh`:把内网的 `22` 端口映射到 VPS 的 `6000` 端口。

- 使用时直接 `ssh -p 6000 user@你的VPS_IP` 即可远程登录。

- `web`:把内网的 Web 服务映射到公网域名 `example.com`。

启动客户端:

```bash
./frpc -c frpc.toml
```

同样可以用 `systemd` 托管。

---

## 常见问题

1. **防火墙问题**

- 确保 VPS 开放了 `bindPort`、`dashboardPort` 和所有 `remotePort`。

- 例如用 `ufw`:

```bash
sudo ufw allow 7000
sudo ufw allow 7500
sudo ufw allow 6000
```

2. **Token 验证失败**

- 检查 `frps.toml` 和 `frpc.toml` 的 `auth.token` 是否一致。

3. **HTTP 映射无效**

- 确保域名解析到 VPS 的公网 IP。

- 如果用 80/443 端口,需要在 VPS 开放这些端口。

---

## 总结

frp 的优点是:

- 配置简单

- 支持多种协议(TCP、UDP、HTTP、HTTPS、STCP、XTCP)

- 有 Dashboard 方便管理

在实际使用中,建议:

- 使用 **Token 或 TLS** 加强安全性

- 配合 Nginx 反向代理,让多个服务共享 80/443

- 配合 systemd 实现开机自启

这样一来,就可以非常方便地在公网访问内网服务了 🚀

---

正文完
 0